require('dotenv').config(); // ⬅️ 加载 .env 文件中的环境变量

const fs = require('fs'); // 引入文件系统模块
const puppeteer = require('puppeteer');

const targetUsers = require('./userList.js');

console.log('targetUsers', targetUsers);
console.log('puppeteer', puppeteer);

(async () => {
  const browser = await puppeteer.launch({
    executablePath:
      'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
    headless: false,
  }); // 非无头模式便于调试
  const page = await browser.newPage();

  // 打开 Gitee 登录页面
  await page.goto('https://gitee.com/login');

  // 填写登录表单（根据实际页面结构调整选择器）
  await page.type('#user_login', process.env.GITEE_USERNAME); // 替换为你的用户名
  await page.type('#user_password', process.env.GITEE_PASSWORD); // 替换为你的密码
  await page.click('input[type=submit]');

  // 等待跳转到首页，确认登录成功
  await page.waitForNavigation();

  await new Promise((resolve) => setTimeout(resolve, 2000)); // 防止跳转太快

  const users = targetUsers.targetUsers;
  const totalUsers = users.length; // 🔢 总用户数量
  let sentCount = 0; // ✅ 已发送私信的数量
  let noMsgButtonCount = 0; // 🚫 没有私信按钮的次数

  const failedUsers = []; // 用于存储发送失败的用户

  // 🔄 循环发送私信给每个用户
  for (const username of targetUsers.targetUsers) {
    try {
      // 进入目标用户的主页
      const profileUrl = `https://gitee.com/${username}`;
      await page.goto(profileUrl, { waitUntil: 'networkidle2' });
      console.log(`正在访问用户主页: ${username}`);

      // 🔍 检查是否存在私信按钮
      const messageButton = await page.$('.send-msg-button');

      if (!messageButton) {
        console.log(`⚠️ 用户 [${username}] 没有私信按钮，跳过`);
        noMsgButtonCount++;
        continue; // 跳过当前用户
      }

      // 点击“发私信”按钮
      await page.waitForSelector('.send-msg-button', { timeout: 10000 });
      await page.click('.send-msg-button');

      // 输入私信内容
      await page.type(
        '.content-input',
        'VTJ 上线 AI + 低代码，邀请您体验。\n 项目仓库： https://gitee.com/newgateway/vtj'
      );

      // 提交私信
      await page.click('.ok');
      console.log(`✅ 已向用户 [${username}] 发送私信`);

      // 更新已发送数量
      sentCount++;
      console.log(`📊 当前进度：已发送 ${sentCount} / 共计 ${totalUsers}`);

      // 🕒 每次发送后等待 30 秒
      await new Promise((resolve) => setTimeout(resolve, 30 * 1000));
    } catch (error) {
      console.error(`❌ 向用户 [${username}] 发送私信失败:`, error.message);

      failedUsers.push({ name: username }); // 👈 改成对象格式
      // 如果出错，暂停更长时间再继续
      await new Promise((resolve) => setTimeout(resolve, 60 * 1000));
    }
  }

  // 将失败的用户名写入文件（格式为 [ { name: '...' } ]）
  if (failedUsers.length > 0) {
    fs.writeFileSync('failed_users.json', JSON.stringify(failedUsers, null, 2));
    console.log(`📄 已将失败的用户列表保存到文件: failed_users.json`);
  } else {
    console.log('👏 所有用户私信均发送成功，无需保存失败列表');
  }

  console.log('🎉 所有用户私信已发送完毕');

  console.log('📊 总进度：已发送', sentCount, '/', totalUsers);
  console.log('❌ 发送失败的用户数量：', failedUsers.length);
  console.log('🚫 没有私信按钮的次数：', noMsgButtonCount);
  console.log(
    '🚀 运行结束',
    totalUsers ===
      Number(sentCount) + Number(noMsgButtonCount) + Number(failedUsers.length)
  );
})();
